#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
练习题 03: 字符串格式化大师
难度: ⭐
知识点: 字符串格式化、f-string、format()、%格式化
参考文件: comparison_examples/basics/01_variables_and_data_types.py
"""

def problem_description():
    """
    题目描述:
    掌握Python中所有主要的字符串格式化方法，并能够灵活运用。
    
    要求:
    1. 实现%格式化方法
    2. 实现str.format()方法
    3. 实现f-string方法
    4. 实现模板字符串方法
    5. 处理数字格式化、日期格式化等特殊情况
    
    格式化场景:
    - 基本变量插入
    - 数字格式化（小数位、千分位等）
    - 日期时间格式化
    - 对齐和填充
    - 条件格式化
    """
    pass

import datetime
from string import Template

# TODO: 实现以下函数

def format_with_percent(name, age, score):
    """
    使用%格式化方法格式化字符串
    
    Args:
        name (str): 姓名
        age (int): 年龄
        score (float): 分数
    
    Returns:
        str: 格式化后的字符串
    
    示例:
        >>> format_with_percent("张三", 25, 95.5)
        "学生姓名: 张三, 年龄: 25岁, 分数: 95.50分"
    """
    # 在这里实现你的代码
    pass

def format_with_format_method(name, age, score):
    """
    使用str.format()方法格式化字符串
    
    Args:
        name (str): 姓名
        age (int): 年龄
        score (float): 分数
    
    Returns:
        str: 格式化后的字符串
    
    示例:
        >>> format_with_format_method("李四", 30, 88.75)
        "学生姓名: 李四, 年龄: 30岁, 分数: 88.75分"
    """
    # 在这里实现你的代码
    pass

def format_with_fstring(name, age, score):
    """
    使用f-string方法格式化字符串
    
    Args:
        name (str): 姓名
        age (int): 年龄
        score (float): 分数
    
    Returns:
        str: 格式化后的字符串
    
    示例:
        >>> format_with_fstring("王五", 22, 92.3)
        "学生姓名: 王五, 年龄: 22岁, 分数: 92.30分"
    """
    # 在这里实现你的代码
    pass

def format_with_template(name, age, score):
    """
    使用Template模板方法格式化字符串
    
    Args:
        name (str): 姓名
        age (int): 年龄
        score (float): 分数
    
    Returns:
        str: 格式化后的字符串
    
    示例:
        >>> format_with_template("赵六", 28, 87.9)
        "学生姓名: 赵六, 年龄: 28岁, 分数: 87.90分"
    """
    # 在这里实现你的代码
    pass

def format_numbers(number):
    """
    演示数字的各种格式化方法
    
    Args:
        number (float): 要格式化的数字
    
    Returns:
        dict: 包含各种格式化结果的字典
    
    示例:
        >>> format_numbers(1234567.89)
        {
            'original': 1234567.89,
            'two_decimal': '1234567.89',
            'comma_separated': '1,234,567.89',
            'percentage': '123456789.00%',
            'scientific': '1.23e+06',
            'padded': '0001234567.89'
        }
    """
    # 在这里实现你的代码
    pass

def format_datetime(dt):
    """
    演示日期时间的各种格式化方法
    
    Args:
        dt (datetime.datetime): 日期时间对象
    
    Returns:
        dict: 包含各种格式化结果的字典
    
    示例:
        >>> dt = datetime.datetime(2024, 3, 15, 14, 30, 45)
        >>> format_datetime(dt)
        {
            'iso_format': '2024-03-15T14:30:45',
            'chinese_format': '2024年03月15日 14时30分45秒',
            'us_format': '03/15/2024 02:30:45 PM',
            'date_only': '2024-03-15',
            'time_only': '14:30:45'
        }
    """
    # 在这里实现你的代码
    pass

def create_table_row(data, widths):
    """
    创建格式化的表格行
    
    Args:
        data (list): 行数据
        widths (list): 每列的宽度
    
    Returns:
        str: 格式化的表格行
    
    示例:
        >>> create_table_row(["张三", 25, 95.5], [10, 5, 8])
        "| 张三       |   25 |   95.50 |"
    """
    # 在这里实现你的代码
    pass

def generate_report(students):
    """
    生成学生成绩报告
    
    Args:
        students (list): 学生信息列表，每个元素为(姓名, 年龄, 分数)
    
    Returns:
        str: 完整的报告字符串
    
    示例:
        >>> students = [("张三", 20, 95.5), ("李四", 21, 88.0)]
        >>> print(generate_report(students))
        学生成绩报告
        ==================
        | 姓名       | 年龄 | 分数    |
        |------------|------|--------|
        | 张三       |   20 |   95.50 |
        | 李四       |   21 |   88.00 |
        ==================
        平均分: 91.75
    """
    # 在这里实现你的代码
    pass

def demonstrate_string_formatting():
    """
    演示所有字符串格式化方法
    """
    print("=== 字符串格式化演示 ===")
    
    # 测试数据
    name, age, score = "张三", 25, 95.5
    
    print("\n=== 基本格式化方法 ===")
    print(f"% 格式化: {format_with_percent(name, age, score)}")
    print(f"format() 方法: {format_with_format_method(name, age, score)}")
    print(f"f-string: {format_with_fstring(name, age, score)}")
    print(f"Template: {format_with_template(name, age, score)}")
    
    print("\n=== 数字格式化 ===")
    number = 1234567.89
    number_formats = format_numbers(number)
    for format_name, formatted_value in number_formats.items():
        print(f"{format_name}: {formatted_value}")
    
    print("\n=== 日期时间格式化 ===")
    dt = datetime.datetime(2024, 3, 15, 14, 30, 45)
    datetime_formats = format_datetime(dt)
    for format_name, formatted_value in datetime_formats.items():
        print(f"{format_name}: {formatted_value}")
    
    print("\n=== 表格格式化 ===")
    students = [
        ("张三", 20, 95.5),
        ("李四", 21, 88.0),
        ("王五", 19, 92.3),
        ("赵六", 22, 87.9)
    ]
    report = generate_report(students)
    print(report)

if __name__ == "__main__":
    # 运行演示
    demonstrate_string_formatting()
    
    # 性能比较
    print("\n=== 性能提示 ===")
    print("f-string (Python 3.6+) 通常是最快的格式化方法")
    print("对于简单的字符串拼接，+ 操作符可能更直观")
    print("对于复杂的模板，Template 类提供了更好的安全性")
